【学习笔记之Python篇】NumPy

您所在的位置:网站首页 python n维数组保留位数 【学习笔记之Python篇】NumPy

【学习笔记之Python篇】NumPy

2024-07-10 12:19| 来源: 网络整理| 查看: 265

引入NumPy模块 import numpy as np #将numpy重新命名为np 多维数组的创建

一维数组创建

In : np.array([1,2,3,4,5,6]) #创建元素为[1,2,3,4,5,6]的一维数组,其类型为整型'int32' Out: array([1, 2, 3, 4, 5, 6]) In : np.arange(1, 10, 2) #.arange(起始数字, 结束数字(实际循环的是结束数字-1),【跳数】) #创建元素从1到9,并且跳数为2的一维数组,其类型为整型'int32' Out : array([1, 3, 5, 7, 9])

注意:arange函数只可以创建一维数组

二维数组创建

In : np.array([[1,2,3],[4,5,6]]) #创建2行3列元素为[[1,2,3],[4,5,6]]的二维数组,其类型为整型'int32 Out: array([[1, 2, 3], [4, 5, 6]])

特定函数创建数组

创建全是零的二维数组 .zeros((行数,列数) ) 或 创建全是零的一维数组 .zeros(个数)

In : np.zeros(8) #创建8个全是零的一维数组,其类型为浮点型'float64' Out : array([0., 0., 0., 0., 0., 0., 0., 0.]) In : np.zeros((2,3)) #创建2行3列全是零的二维数组,其类型为浮点型'float64' Out : array([[0., 0., 0.], [0., 0., 0.]])

创建全是一的二维数组 .ones(( 行数 ,列数 )) 或 创建全是一零的一维数组 .ones(个数)

In : np.ones(8) Out : array([1., 1., 1., 1., 1., 1., 1., 1.]) In : np.ones((2,3)) #创建2行3列全是一的二维数组,其类型为浮点型'float64' Out : array([[1., 1., 1.], [1., 1., 1.]])

创建空数组的二维数组 .empty(( 行数 , 列数 )) 或 创建空数组的二维数组 .empty(个数)

In : np.empty(4) Out : array([7.74860416e-304, 7.74860419e-304, 7.74860419e-304, 7.74860419e-304]) In : np.empty((3,3)) #创建3行3列全是空值的二维数组,其中的值都为系统内脏值,其类型为浮点型'float64' Out : array([[6.23042070e-307, 7.56587584e-307, 1.37961302e-306], [6.23053614e-307, 6.23053954e-307, 1.20160711e-306], [1.42410974e-306, 2.22522596e-306, 3.91786943e-317]])

学习已经出现的数组维度:.ones_like( 学习的数组 )、 .empty_like( 学习的数组 ) 、 .zeros_like( 学习的数组 )

In : a1 = np.array([[1,2,3],[4,5,6],[1,2,3]]) In : a1 Out : array([[1, 2, 3], [4, 5, 6], [1, 2, 3]]) In : np.ones_like(a1) Out : array([[1, 1, 1], [1, 1, 1], [1, 1, 1]]) In : np.empty_like(a1) Out : array([[ 890806488, 626, -734490714], [-629125869, 943353072, 626], [-114974809, 282148543, 976989600]]) In : np.zeros_like(a1) Out : array([[0, 0, 0], [0, 0, 0], [0, 0, 0]])

构造单位矩阵:.eye( 行数,列数,k=对角元素的索引,dtype=元素类型 ) 可创建矩形矩阵 、 .identity( 行数,dtype=元素类型 ) 只能创建方形矩阵

In : np.eye(4) Out : array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.], [0., 0., 0., 1.]]) In : np.eye(3,5,k=1,dtype=int) Out : array([[0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0]]) In : np.identity(3) Out : array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]) In : np.identity(3,dtype=int) Out : array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) 多维数组的常用属性

查看数组中元素的数据类型:.dtype

In : a1=np.arange(1,11) In : a1.dtype Out : dtype('int32')

获取元素的个数:.size

In : a1=np.arange(1,11) In : a1.size Out : 10

查看元素字节大小:.itemsize

In : a1=np.arange(1,11) In : a1.itemsize Out[30]: 4

获取数组的维数:.ndim

In : a1=np.arange(1,11) In : a1.ndim Out : 1 In : a2 = np.array([[1,2,3],[4,5,6],[1,2,3]]) In : a2.ndim Out : 2

获取每个维度上元素的行和列数:.shape

In : a1=np.arange(1,11) In : a1.shape Out[31]: (10,) In : a2 = np.array([[1,2,3],[4,5,6],[1,2,3]]) In : a2.shape Out : (3, 3)

数组重塑操作:.reshape

In : a=np.arange(1,13) Out : array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) In : a.reshape(3,4) Out : array([[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12]]) In : a4=np.array((4,5,6,1,1,1,0,0,0)).reshape(3,3) In : a4 Out : array([[4, 5, 6], [1, 1, 1], [0, 0, 0]]) In : a4=a4.reshape(1,9) In : a4 Out : array([[4, 5, 6, 1, 1, 1, 0, 0, 0]])

数组合并操作:.concatenate([arr1, arr2],axis=1或0)、.vstack():在0轴/行合并、.hstack():在1轴/列合并

In : arr1 = np.arange(8).reshape(2,4) In : arr2 = np.arange(1,13).reshape(3,4) In : arr1 Out : array([[0, 1, 2, 3], [4, 5, 6, 7]]) In : arr2 Out : array([[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12]]) In : np.concatenate([arr1, arr2]) Out : array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12]]) In : np.concatenate([arr1, arr2],axis=0) #行合并 Out : array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12]]) In : a=np.vstack([arr1,arr2]) #行合并 In : a Out : array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12]]) In : arr1 = np.arange(8).reshape(2,4) In : arr1 Out : array([[0, 1, 2, 3], [4, 5, 6, 7]]) In : arr3 = np.arange(1,9).reshape(2,4) In : arr3 Out : array([[1, 2, 3, 4], [5, 6, 7, 8]]) In : np.concatenate([arr1, arr3],axis=1) #列合并 Out : array([[0, 1, 2, 3, 1, 2, 3, 4], [4, 5, 6, 7, 5, 6, 7, 8]]) In : a2=np.hstack([arr1,arr3]) #列合并 In : a2 Out : array([[0, 1, 2, 3, 1, 2, 3, 4], [4, 5, 6, 7, 5, 6, 7, 8]])

数组拆分:.split()

In : arr=np.arange(1,20) In : arr Out : array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]) In : np.split(arr,[5,10]) #在5断开了一下,又在10断开了一下 Out : [array([1, 2, 3, 4, 5]), array([ 6, 7, 8, 9, 10]), array([11, 12, 13, 14, 15, 16, 17, 18, 19])]

数组置换:.T

In : a = np.array([[1,2,3], [1,2,5], [4,6,7]]) In : a.T Out[12]: array([[1, 1, 4], [2, 2, 6], [3, 5, 7]]) numpy模块的随机函数:numpy.random.函数名()

生成[a,b]区间内的随机整数:numpy.random.randint(low , high )

In : np.random.randint(3,10) Out : 4 np.random.randint(3,40,size=(3,3)) Out : array([[24, 26, 30], [ 4, 22, 19], [32, 10, 11]])

生成a行b列符合正态分布的数组元素:numpy.random.randn(行, 列)

In : a1=np.random.randn(3,3) In : a1 Out : array([[-1.47626939, 1.53729025, 0.6441585 ], [ 0.54523365, 0.66979023, -1.06014085], [-0.45790031, -1.5220013 , 2.03525964]])

生成符合泊松分布的数组元素:numpy.random.poisson(p,size)

In : np.random.poisson(1,5) Out[22]: array([3, 3, 2, 0, 1])

正态分布:numpy.random.normal(loc, scale,size)

参数loc(float):正态分布的均值,对应着这个分布的中心。loc=0说明这一个以Y轴为对称轴的正态分布, 参数scale(float):正态分布的标准差,对应分布的宽度,scale越大,正态分布的曲线越矮胖,scale越小,曲线越高瘦。 参数size(int 或者整数元组):输出的值赋在shape里,默认为None。

以num作为随机种子,生成伪随机数:numpy.random.seed(num)

洗牌函数:numpy.random.shuffle()

多维数组的索引和切片

numpy切片

In : arr = np.arange(10) In : arr Out : array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) In : arr1 = arr[-3:-1] In : arr1 Out : array([7, 8]) In : arr1[:] #全切 Out : array([7, 8])

numpy切片更改元素值与普通数组更改元素值不同

numpy更改元素的值 In : m=np.zeros(10,dtype=int) In : m Out : array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) In : n=m[:] #n等于m的全切 In : n Out : array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) In : n[0]=100 #将n的第0个元素赋值为100 In : n #查看n元素,发现第0个值被更改了 Out[83]: array([100, 0, 0, 0, 0, 0, 0, 0, 0, 0]) In : m #查看n元素,发现第0个值也被更改了 Out : array([100, 0, 0, 0, 0, 0, 0, 0, 0, 0]) 数组更改元素的值 In : f=[1,1,1,1,1,1,1] In : f Out : [1, 1, 1, 1, 1, 1, 1] In : t=f[:] #t等于f的全切 In : t Out : [1, 1, 1, 1, 1, 1, 1] In : t[0]=100 #将t的第0个元素赋值为100 In : t #查看t元素,发现第0个值被更改了 Out : [100, 1, 1, 1, 1, 1, 1] In : f #查看f元素,发现第0个值没被更改 Out : [1, 1, 1, 1, 1, 1, 1] 多维数组的基本运算 In : y = np.arange(10) In : x = np.arange(1,11) In : y Out : array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) In : x Out : array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

开方

In : y**2 Out : array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81], dtype=int32)

相乘

In : x*y Out : array([ 0, 2, 6, 12, 20, 30, 42, 56, 72, 90])

绝对值

In : np.abs(x) Out[106]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

平方

In : np.square(x) Out : array([ 1, 4, 9, 16, 25, 36, 49, 64, 81, 100], dtype=int32)

开平方根

In : np.sqrt(x) Out : array([1. , 1.41421356, 1.73205081, 2. , 2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. , 3.16227766]) 条件逻辑运算

python条件运算表达式:x if 条件 else y

In : result = 1 if 2 > 3 else 0 #成立输出1,否则输出0 In : result Out : 0 In : result = 1 if 2 > 1 else 0 In : result Out : 1

.where(条件,成立结果,不成立结果):

In : arr1 = np.array([1,2,3,4]) In : arr2 = np.array([5,6,7,8]) In : cond = np.array([True, False, False, True]) In : result = np.where(cond, arr1, arr2) In : result Out: array([1, 6, 7, 4])

数组求和:.sum():

In : arr1 = np.arange(9).reshape(3,3) In : arr1 Out : array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) In : arr1.sum() #全部求和 Out : 36 In : arr1.sum(axis=0) #列项求和 Out : array([ 9, 12, 15]) In : arr1.sum(axis=1) #行项求和 Out : array([ 3, 12, 21])

均值:.mean():

In : arr1 = np.arange(5) In : arr1 Out : array([0, 1, 2, 3, 4]) In : arr1.mean() Out : 2.0

方差的平方根:.std();

In : arr1 = np.arange(5) In : arr1 Out : array([0, 1, 2, 3, 4]) In : arr1.std() Out : 1.4142135623730951


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3